package com.gp8.tier1;

import java.util.Scanner;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;

public class InterfacePiaffeurImpl implements InterfacePiaffeur {

	private Scanner scanInput = new Scanner(System.in);
	private String mail, pseudo, password, message, critere = null;
	private String choix = "N";
	private int idAbonnement, idPiafferie;
	private MenuPiaffeur menu;

	@Override
	public void formulaireCreation() {
		choix = "N";
		System.out.println(" ========================================================");
		System.out.println("|           CREATION D'UN COMPTE                         |");
		while (choix != null && choix.equals("N")) {
			System.out.println("|           Entrez votre adresse e-mail :                |");
			mail = scanInput.nextLine();
			System.out.println("|           Entrez votre pseudo :                        |");
			pseudo = scanInput.nextLine();
			System.out.println("|           Entrez votre mot de passe :                  |");
			password = scanInput.nextLine();
			System.out.println("|           Valider (O/N) :                              |");
			choix = scanInput.nextLine();
		}
		System.out.println("|           traitement en cours...                       |");

		try {
			Client client = Client.create();

			WebResource webResource = client.resource("http://localhost:8080/service/creation/"+mail+"/"+pseudo+"/"+password);

			ClientResponse response = webResource.accept("text/plain")
					.get(ClientResponse.class);

			if (response.getStatus() != 200) {
				System.out.println("Erreur " + response.getStatus());
			} else {

				String output = response.getEntity(String.class);
				if (output != "") {
					System.out.println(" ========================================================");
					System.out.println("Bienvenue ! ");
					menu = new MenuPiaffeur(this);
					menu.menuPiaffeur(Integer.parseInt(output));
				} else {
					System.out.println(" ========================================================");
					System.out.println("Erreur a la creation...");
					menu.menuPrincipal();
				}
			}
		} catch (Exception e) {

			e.printStackTrace();

		}
	}

	@Override
	public void formulaireConnexion() {
		choix = "N";
		System.out.println(" ========================================================");
		System.out.println("|                CONNEXION A VOTRE COMPTE                |");
		while (choix != null && choix.equals("N")) {
			System.out.println("|         Entrez votre adresse e-mail :                  |");
			mail = scanInput.nextLine();
			System.out.println("|               Entrez votre mot de passe :              |");
			password = scanInput.nextLine();
			System.out.println("|               Valider (O/N) :                          |");
			choix = scanInput.nextLine();
		}
		System.out.println("|               traitement en cours...                   |");

		try {
			Client client = Client.create();
			WebResource webResource = client.resource("http://localhost:8080/service/connexion/"+mail+"/"+password);
			ClientResponse response = webResource.accept("text/plain")
					.get(ClientResponse.class);

			if (response.getStatus() != 200) {
				System.out.println(" ========================================================");
				System.out.println("Erreur " + response.getStatus());
			} else {
				String output = response.getEntity(String.class);
				if (output != "") {
					System.out.println(" ========================================================");	
					System.out.println("Bienvenue ! ");
					menu = new MenuPiaffeur(this);
					menu.menuPiaffeur(Integer.parseInt(output));
				} else {
					System.out.println(" ========================================================");	
					System.out.println("Erreur a la connexion...");
					menu.menuPrincipal();
				}
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	public void consulterCompte(int id) {
		System.out.println(" ========================================================");			

		try {
			Client client = Client.create();

			WebResource webResource = client.resource("http://localhost:8080/service/compte/"+id);

			ClientResponse response = webResource.accept("text/plain")
					.get(ClientResponse.class);

			if (response.getStatus() != 200) {
				System.out.println(" ========================================================");	
				System.out.println("Erreur " + response.getStatus());
			} else {
				String output = response.getEntity(String.class);
				System.out.println(" ========================================================");
				System.out.println(output);
			}

		} catch (Exception e) {
			e.printStackTrace();
		}		
	}

	@Override
	public void formulairePiaffer(int id) {
		choix = "N";
		System.out.println(" ========================================================");
		System.out.println("|               CREATION D'UNE PIAFFERIE                 |");
		while (choix != null && choix.equals("N")) {
			System.out.println("|           Entrez votre message :                       |");
			message = scanInput.nextLine();
			System.out.println("|           Valider (O/N) :                              |");
			choix = scanInput.nextLine();
		}
		System.out.println("|           traitement en cours...                       |");
		
		try {
			Client client = Client.create();
			message = message.replace(" ", "%20");
			WebResource webResource = client.resource("http://localhost:8080/service/ajouterMessage/"+id+"/"+message);
			ClientResponse response = webResource.accept("text/plain")
					.get(ClientResponse.class);
			
			if (response.getStatus() != 200) {
				System.out.println(" ========================================================");	
				System.out.println("Erreur " + response.getStatus());
			} else {
				String output = response.getEntity(String.class);
				System.out.println(" ========================================================");	
				System.out.println(output);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	public void recupererPiafferies(int id) {
		System.out.println(" ========================================================");
		System.out.println("|           RECUPERATION DES PIAFFERIES EN COURS...      |");	
		try {
			Client client = Client.create();
			WebResource webResource = client.resource("http://localhost:8080/service/mesMessages/"+id);
			ClientResponse response = webResource.accept("text/plain")
					.get(ClientResponse.class);

			if (response.getStatus() != 200) {
				System.out.println(" ========================================================");	
				System.out.println("Erreur " + response.getStatus());
			} else {
				String output = response.getEntity(String.class);
				System.out.println(" ========================================================");	
				System.out.println(output);
				menu = new MenuPiaffeur(this);
				menu.menuPiafferies(id);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	public void recupererAbonnements(int id) {
		System.out.println(" ========================================================");
		System.out.println("|           RECUPERATION DES ABONNEMENTS EN COURS...     |");	
		try {
			Client client = Client.create();
			WebResource webResource = client.resource("http://localhost:8080/service/mesAbonnements/"+id);
			ClientResponse response = webResource.accept("text/plain")
					.get(ClientResponse.class);

			if (response.getStatus() != 200) {
				System.out.println(" ========================================================");
				System.out.println("Erreur " + response.getStatus());
			} else {
				String output = response.getEntity(String.class);
				System.out.println(" ========================================================");
				System.out.println(output);
				menu = new MenuPiaffeur(this);
				menu.menuAbonnements(id);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	@Override
	public void formulaireRecherchePiaffeur(int id) {
		choix = "N";
		System.out.println(" ========================================================");
		System.out.println("|           RECHERCHER UN PIAFFEUR                       |");
		while (choix != null && choix.equals("N")) {
			System.out.println("|           Entrez le pseudo du piaffeur :               |");
			critere = scanInput.nextLine();
			critere = critere.replace(" ", "%20");
			System.out.println("|           Valider (O/N) :                              |");
			choix = scanInput.nextLine();
		}
		System.out.println("|           traitement en cours...                       |");
		
		try {
			Client client = Client.create();
			WebResource webResource = client.resource("http://localhost:8080/service/recherchePiaffeur/"+critere);
			ClientResponse response = webResource.accept("text/plain")
					.get(ClientResponse.class);

			if (response.getStatus() != 200) {
				System.out.println(" ========================================================");	
				System.out.println("Erreur " + response.getStatus());
			} else {
				String output = response.getEntity(String.class);
				System.out.println(" ========================================================");	
				System.out.println(output);
				menu = new MenuPiaffeur(this);
				menu.menuAbonnements(id);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	public void formulaireAbonnementPiaffeur(int id) {
		choix = "N";
		System.out.println(" ========================================================");
		System.out.println("|           S'ABONNER A UN PIAFFEUR                      |");
		while (choix != null && choix.equals("N")) {
			System.out.println("|           Entrez l'id du piaffeur :                    |");
			idAbonnement = scanInput.nextInt();
			System.out.println("|           Valider (O/N) :                              |");
			choix = scanInput.nextLine();
		}
		System.out.println("|           traitement en cours...                       |");
		
		try {
			Client client = Client.create();
			WebResource webResource = client.resource("http://localhost:8080/service/ajouterAbonnement/"+idAbonnement+"/"+idAbonnement);
			ClientResponse response = webResource.accept("text/plain")
					.get(ClientResponse.class);
	
			if (response.getStatus() != 200) {
				System.out.println(" ========================================================");
				System.out.println("Erreur " + response.getStatus());
			} else {
				String output = response.getEntity(String.class);
				System.out.println(" ========================================================");
				System.out.println(output);
				if (output.contains("ajouté")) {
					menu = new MenuPiaffeur(this);
					menu.menuPiaffeur(idAbonnement);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
			
	@Override
	public void formulaireRecherchePiafferie(int id) {
		choix = "N";
		System.out.println(" ========================================================");
		System.out.println("|           RECHERCHER UNE PIAFFERIE                     |");
		while (choix != null && choix.equals("N")) {
			System.out.println("|           Entrez votre critère de recherche :          |");
			critere = scanInput.nextLine();
			critere = critere.replace(" ", "%20");
			System.out.println("|           Valider (O/N) :                              |");
			choix = scanInput.nextLine();
		}
		System.out.println("|           traitement en cours...                       |");
		
		try {
			Client client = Client.create();
			WebResource webResource = client.resource("http://localhost:8080/service/recherchePiafferie/"+critere);
			ClientResponse response = webResource.accept("text/plain")
					.get(ClientResponse.class);

			if (response.getStatus() != 200) {
				System.out.println(" ========================================================");	
				System.out.println("Erreur " + response.getStatus());
			} else {
				String output = response.getEntity(String.class);
				System.out.println(" ========================================================");	
				System.out.println(output);
				menu = new MenuPiaffeur(this);
				menu.menuRecherche(id);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}	
	}

	@Override
	public void supprimerPiafferies(int id) {
		choix = "N";
		System.out.println(" ========================================================");
		System.out.println("|           SUPPRESION D'UNE PIAFFERIE :                 |");
		while (choix != null && choix.equals("N")) {
			System.out.println("|       Insérez l'id de la piafferie à supprimer :       |");
			idPiafferie = scanInput.nextInt();
			System.out.println("|       Valider (O/N) :                                  |");
			choix = scanInput.nextLine();
		}
		
		try {
			Client client = Client.create();
			WebResource webResource = client.resource("http://localhost:8080/service/supprimerPiafferie/"+id+"/"+idPiafferie);
			ClientResponse response = webResource.accept("text/plain")
					.get(ClientResponse.class);

			if (response.getStatus() != 200) {
				System.out.println(" ========================================================");
				System.out.println("Erreur " + response.getStatus());
			} else {
				String output = response.getEntity(String.class);
				System.out.println(" ========================================================");
				System.out.println(output);
				menu = new MenuPiaffeur(this);
				menu.menuPiaffeur(id);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
}

	@Override
	public void deconnexion(int id) {
		System.out.println(" ========================================================");
		System.out.println("|                 DECONNEXION EN COURS...                |");	
		try {
			Client client = Client.create();
	
			WebResource webResource = client.resource("http://localhost:8080/service/deconnexion/"+id);
	
			ClientResponse response = webResource.accept("text/plain")
					.get(ClientResponse.class);
	
			if (response.getStatus() != 200) {
				System.out.println(" ========================================================");
				System.out.println("Erreur " + response.getStatus());
			} else {
				String output = response.getEntity(String.class);
				System.out.println(" ========================================================");
				System.out.println(output);
				if (output.contains("déconnecté")) {
					mail = pseudo = password = message = critere = null;
					menu = new MenuPiaffeur(this);
					menu.menuPrincipal();
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}		
	}

	@Override
	public void supprimerAbonnement(int id) {
		choix = "N";
		System.out.println(" ========================================================");
		System.out.println("|             SUPPRESSION D'UN ABONNEMENT :              |");
		while (choix != null && choix.equals("N")) {
			System.out.println("|    Insérez l'id du piaffeur pour le désabonnement :    |");
			idAbonnement = scanInput.nextInt();
			System.out.println("|    Valider (O/N) :                                     |");
			choix = scanInput.nextLine();
		}
		
		try {
			Client client = Client.create();
			WebResource webResource = client.resource("http://localhost:8080/service/supprimerAbonnement/"+id+"/"+idAbonnement);
			ClientResponse response = webResource.accept("text/plain")
					.get(ClientResponse.class);

			if (response.getStatus() != 200) {
				System.out.println(" ========================================================");
				System.out.println("Erreur " + response.getStatus());
			} else {
				String output = response.getEntity(String.class);
				System.out.println(" ========================================================");
				System.out.println(output);
				menu = new MenuPiaffeur(this);
				menu.menuPiaffeur(id);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
